iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 18
0
DevOps

用30天來介紹和使用 Docker系列 第 18

Day18:使用 Docker Volume 的功能 (二)

  • 分享至 

  • xImage
  •  

昨天已經介紹了如何使用在執行 docker run 指令,把 Volume Mount 起來使得 Container 的資料夾路徑可以 Mapping 到實體主機的資料夾路徑,今天要介紹的部份是透過撰寫 Dockerfile 的方式使用 Volume 的指令,這樣使用者就不用在執行 docker run 指令時指定 -v 參數,就可以把 Volume Mount 起來。

另外今天還會 Demo 如何讓 Container 之間的資料共享

Example1:
撰寫一個 Dockerfile 使用 VOLUME 指令,把 Docker的Image Build起來,然後啟動 Docker Container,把資料寫進在 Docker Container裡面,最後使用 docker inspect 指令,找到 Mapping 到實體主機的資料夾路徑,確認是否有看到之前寫在 Container 裡面的檔案。

  1. Dockerfile 如下
FROM centos
VOLUME ["/storage"]

另外在 VOLUME 指令的寫法可以寫成多個路徑,如下

VOLUME ["/storage1", "/storage2", "/storage2"]
  1. Build Image 指令如下
$ docker build -t volumetest .

輸入 docker build 指令時,資料夾要切換到和 Dockerfile 檔案同一層的資料夾路徑,Build 完 Image 之後的結果如下畫面
https://ithelp.ithome.com.tw/upload/images/20171221/20103456ssdXOPASlT.png

  1. 啟動 Docker Container 指令如下
$ docker run -it volumetest /bin/bash

因為 VOLUME 已經寫在 Dockerfile 裡,所以在使用 docker run 指令時沒有給 -v 參數

  1. 在 Container 裡面寫入一個檔案,如下畫面
    https://ithelp.ithome.com.tw/upload/images/20171221/20103456qE64sS2rSY.png

  2. 在實體主機上使用 docker inspect 指令,找到 Volume 在實體主機的資料夾路徑
    https://ithelp.ithome.com.tw/upload/images/20171221/2010345681g1gdCrYx.png

e2987aaab700 為 ContainerID,也可以使用指定 Container Name 的方式

  1. 使用 root 權限,切換到 Volume 的實體主機的資料夾路徑之後,可以看到在第4步驟在 Container 裡面寫的檔案,也可以在實體主機的資料夾看到 helloworld.txt 的檔案,畫面如下
    https://ithelp.ithome.com.tw/upload/images/20171221/20103456ufZiv553yq.png

Example2:
如何讓 Container 和 Container 之間的資料共享,可以使用以下的方式

  1. 啟動第一個 Container 指令如下
$ docker run -it -v /data --name=container1 centos /bin/bash
  1. 啟動第二個 Container 指令如下
$ docker run -it --volumes-from container1 --name=container2 centos /bin/bash

--volumes-from 參數指定 Container Name 為 Container1 的 Volume 資料和Container2 做共享

  1. 測試二個 Container 之間資料是否能共享,畫面如下
    https://ithelp.ithome.com.tw/upload/images/20171221/20103456EjWytkm8Hw.png

左邊的 Container1 切換到 /data 資料夾之後建立一個 helloworld.txt 的檔案,之後在右邊的 Container2 切換到 /data 資料夾之後查看 helloworld.txt 的檔案內容為 HELLOWORLD,這樣就代表了 Container 之間的資料有做到共享的效果。

今天介紹了 Dockerfile Volume 的用法以及 Container 之間的資料做共享,不用另外的架設 file server 就可以分享資料,使資料在使用上更加的方便,對於在備份資料方面也更加的簡單。


上一篇
Day17:使用 Docker Volume 的功能 (一)
下一篇
Day19:使用 Docker 的 Volume 來部署 war 檔
系列文
用30天來介紹和使用 Docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言